package com.ibeeking.gmc.global.g.rest.controller.v1.feign;

import com.ibeeking.gmc.global.g.rest.service.IAreaService;
import com.ibeeking.found.common.entity.AreaDTO;
import com.ibeeking.found.common.entity.AreaSimpleDTO;
import com.ibeeking.gmc.global.api.common.query.AreaQuery;
import com.ibeeking.gmc.global.service.common.vo.AreaPageVO;
import com.ibeeking.nematos.utils.data.Collections3;
import com.ibeeking.nematos.utils.json.JsonUtils;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName AreaController控制器
 * @Description 地区控制器
 * @Author ibeeking
 * @Date 2020-12-23 13:43
 **/
@RestController
@RequestMapping("/g/area/feign/v1")
public class AreaFeignController {

    @Resource
    private IAreaService areaServiceImpl;

    /**
     * 根据编码查询名称
     *
     * @param code 地区编码
     * @return code
     */
    @PostMapping(value = "/queryName/{code}")
    public AreaDTO queryName(@PathVariable("code") @NotBlank(message = "地区编码不能为空") String code) {
        return areaServiceImpl.queryName(code);
    }

    /**
     * 根据id查询名称
     *
     * @param id 地区id
     * @return code
     */
    @PostMapping(value = "/queryAreaName/{id}")
    public AreaDTO queryAreaName(@PathVariable("id") @NotBlank(message = "id不能为空") Long id) {
        return areaServiceImpl.queryAreaName(id);
    }

    /**
     * 根据编码查询名称
     *
     * @param codes 编码列表
     * @return 返回
     */
    @PostMapping(value = "/queryNames")
    public List<AreaDTO> queryNames(@RequestBody List<String> codes) {
        return areaServiceImpl.queryNames(codes);
    }


    /**
     * 根据父编码查询名称
     *
     * @param parentCode 编码列表
     * @return 返回
     */
    @PostMapping(value = "/queryNamesByParentCode")
    public List<AreaDTO> queryNames(@RequestBody String parentCode) {
        return areaServiceImpl.queryNamesByParentCode(parentCode);
    }

    /**
     * 根据编码查询名称
     *
     * @param areaQuery 编码列表
     * @return 返回
     */
    @PostMapping(value = "/queryArea")
    public List<AreaDTO> queryArea(@RequestBody AreaQuery areaQuery) {
        return areaServiceImpl.queryArea(areaQuery);
    }

    /**
     * 根据编码查询名称
     *
     * @param parentCode 编码列表
     * @return 返回
     */
    @PostMapping(value = "/queryAreasByParentCode")
    public List<AreaDTO> queryAreasByparentCode(@RequestBody String parentCode ) {
        List<AreaPageVO> vos =  areaServiceImpl.listByParentCode(parentCode);
        if (Collections3.isEmpty(vos)){
            return Collections3.emptyList();
        }
        return JsonUtils.jsonToList(vos,AreaDTO.class);
    }



    /**
     * 根据id查询地以及其上级地区
     *
     * @param ids id列表
     * @return 返回
     */
    @PostMapping(value = "/queryAreasByIds")
    public List<AreaSimpleDTO> listByAreaIds(@RequestBody List<Long> ids ) {
        List<AreaSimpleDTO> dtos =  areaServiceImpl.listByAreaIds(ids);
        return dtos;
    }


    /**
     * 根据id查询地以及其上级地区
     *
     * @param code
     * @return 返回
     */
    @PostMapping(value = "/queryAreasByCode/{code}")
    public AreaSimpleDTO queryAreasByCode(@PathVariable("code") String code ) {
        AreaSimpleDTO dtos =  areaServiceImpl.listByAreaCode(code);
        return dtos;
    }

    /**
     * 根据codes查询他下面所有的子codes
     *
     * @param codes
     * @return 返回
     */
    @PostMapping(value = "/queryLowerAreasByCode/{flag}")
    public List<AreaDTO> queryLowerAreasByCode(@RequestBody List<String> codes,@PathVariable("flag") Boolean flag ) {
        List<AreaDTO> dtos = new ArrayList<>();
        dtos = areaServiceImpl.queryLowerAreasByCode(codes,dtos,flag);
        return dtos;
    }

}
